// pages/shop/shop.js
const app = getApp()
const { request } = require("../../utils/request")

Page({
  /**
   * 页面的初始数据
   */
  data: {
    urlPath: "",
    goods: [],
    show: false,
    selectedGood: null,
    quantity: 1,
    types: [],
    activeKey: 0, // 添加一个默认的活动键值
    secondTypes:[],
    active: 1,
    activeCategory: 0, // 添加活动分类，用于滚动定位
  },

  storesJia() {
    const num = this.data.quantity
    this.setData({
      quantity: num + 1,
    })
  },
  storesJian() {
    const num = this.data.quantity
    this.setData({
      quantity: num - 1,
    })
  },
  closeSku() {
    // 关闭弹窗
    this.setData({
      show: false,
    })
  },
  showAddToCartSheet(e) {
    this.setData({
      show: true,
      selectedGood: e.currentTarget.dataset.item,
      quantity: 1,
    })
  },
  addToCart(e) {
    console.log(e.currentTarget.dataset.item)
    const { selectedGood, quantity, urlPath } = this.data
    if (selectedGood && quantity) {
      console.log("加入购物车:", selectedGood, quantity)
      //封装请求数据
      const requestData = {
        goodId: selectedGood.id, // 商品 ID
        empId: wx.getStorageSync("userId"), // 假设你已经获取到员工 ID
        count: quantity, // 商品数量
        price: selectedGood.price, // 商品单价
        image: selectedGood.image, // 商品图片
      }
      console.log("请求数据:", requestData)
      // 发起 POST 请求
      request({
        url: `${app.globalData.baseUrl}/${urlPath}/carts/add`,
        method: "POST",
        data: requestData,
      })
        .then((res) => {
          console.log("加入购物车成功:", res.data)
          wx.showToast({
            title: `已加入购物车 x${quantity}`,
            icon: "success",
          })
        })
        .catch((error) => {
          console.error("加入购物车失败:", error)
          wx.showToast({
            title: "加入购物车失败",
            icon: "none",
          })
        })
    }
    this.closeSku()
  },

  // 直接添加到购物车(不弹出选择数量窗口)
  addToCartDirect(e) {
    const item = e.currentTarget.dataset.item;
    // 默认添加一个
    const quantity = 1;
    
    //封装请求数据
    const requestData = {
      goodId: item.id, // 商品 ID
      empId: wx.getStorageSync("userId"), // 假设你已经获取到员工 ID
      count: quantity, // 商品数量
      price: item.price, // 商品单价
      image: item.image, // 商品图片
    }
    console.log("直接加入购物车:", requestData)
    
    // 发起 POST 请求
    request({
      url: `${app.globalData.baseUrl}/${this.data.urlPath}/carts/add`,
      method: "POST",
      data: requestData,
    })
      .then((res) => {
        console.log("加入购物车成功:", res.data)
        wx.showToast({
          title: `已加入购物车`,
          icon: "success",
        })
      })
      .catch((error) => {
        console.error("加入购物车失败:", error)
        wx.showToast({
          title: "加入购物车失败",
          icon: "none",
        })
      })
  },

  getPath() {
    try {
      const tokenName = wx.getStorageSync("tokenName")
      console.log("tokenName:", tokenName)
      if (tokenName === "usertoken") {
        this.setData({ urlPath: "employee" })
      } else if (tokenName === "admintoken") {
        this.setData({ urlPath: "admin" })
      } else {
        this.setData({ urlPath: "sadmin" })
      }
    } catch (e) {
      console.error("获取 tokenName 失败:", e)
      // this.setData({ urlPath: "sadmin" }); // 默认值
    }
  },
  onChange(e) {
    // 更新活动键值
    const key = e.detail;
    this.setData({
      activeKey: key,
      activeCategory: key // 更新活动分类，用于滚动定位
    });
    // 根据新的活动键值加载商品数据
    this.getItemsByType(key);
    
    // 添加滚动到所选类别的效果
    wx.createSelectorQuery()
      .select(`#cate_${key}`)
      .boundingClientRect(function(rect) {
        // 仅在元素存在时执行滚动
        if (rect) {
          wx.createSelectorQuery()
            .select('.sidebar-scroll')
            .scrollOffset(function(res) {
              // 计算需要滚动的位置
              const scrollTop = res.scrollTop;
              const targetTop = rect.top;
              
              // 执行滚动，确保分类在视图中居中显示
              wx.createSelectorQuery()
                .select('.sidebar-scroll')
                .boundingClientRect(function(scrollRect) {
                  const offset = targetTop - scrollRect.top - (scrollRect.height / 2) + (rect.height / 2);
                  wx.createSelectorQuery()
                    .select('.sidebar-scroll')
                    .node()
                    .exec((result) => {
                      if (result[0] && result[0].node) {
                        result[0].node.scrollTo({ top: scrollTop + offset, behavior: 'smooth' });
                      }
                    });
                }).exec();
            }).exec();
        }
      }).exec();
  },

  getItemsByType(index = 0) {
    const types = this.data.types
    if (types.length === 0) {
      console.warn("商品类型数据未加载完成")
      return
    }
    const type = types[index]
    console.log(type)
    const urlPath = this.data.urlPath
    
    request({
      url: `${app.globalData.baseUrl}/${urlPath}/goods/?type=${type}`,
      method: "GET",
    })
      .then((res) => {
        console.log(res.data)
        this.setData({
          goods: res.data.data.goods,
          secondTypes: res.data.data.secondTypes
        })
      })
      .catch((res) => {
        console.log("获取商品数据失败", res)
      })
  },

  getType(){
    const urlPath = this.data.urlPath
    request({
      url: `${app.globalData.baseUrl}/${urlPath}/goods/types`,
      method: "GET",
    }).then(
      (res) => {
        console.log(res.data)
        this.setData({
          types: res.data.data
        })
      }
    ).catch((res)=>{
      console.log("获取商品类型失败", res)
    })
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // var that = this //把this对象复制到临时变量that
    this.getPath()
    console.log("获取商品")
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
    this.getItemsByType(0)
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    this.getTabBar().init()
    this.getType()
    
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {},


  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {},

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {},

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {},

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {},
})
